{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "is_executing": true
   },
   "outputs": [],
   "source": [
    "from datetime import datetime\n",
    "\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "from vnpy_portfoliostrategy import BacktestingEngine\n",
    "from vnpy.trader.constant import Interval\n",
    "from vnpy.trader.optimize import OptimizationSetting\n",
    "\n",
    "from vnpy_portfoliostrategy.strategies.etf_rotation_strategy_v2 import EtfRotationStrategy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "is_executing": true
   },
   "outputs": [],
   "source": [
    "engine = BacktestingEngine()\n",
    "# 纳指ETF，黄金ETF，红利ETF，创业板ETF\n",
    "vt_symbols = [\"513100.SSE\", \"518880.SSE\", \"510880.SSE\", \"159915.SZSE\"]\n",
    "\n",
    "engine.set_parameters(\n",
    "    vt_symbols=vt_symbols,\n",
    "    interval=Interval.DAILY,\n",
    "    start=datetime(2016, 1, 1),\n",
    "    end=datetime.now(),\n",
    "    rates={key: 0.0001 for key in vt_symbols},\n",
    "    slippages={key: 0.001 for key in vt_symbols},\n",
    "    sizes={key: 1 for key in vt_symbols},\n",
    "    priceticks={key: 0.001 for key in vt_symbols},\n",
    "    capital=1_000_000,\n",
    ")\n",
    "\n",
    "setting = {\"regression_window\": 25, \"holding_size\": 2}\n",
    "engine.add_strategy(EtfRotationStrategy, setting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false,
    "ExecuteTime": {
     "end_time": "2023-09-01T07:14:34.503946100Z",
     "start_time": "2023-09-01T07:14:33.873906800Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2023-09-01 15:14:33.796678\t开始加载历史数据\n",
      "2023-09-01 15:14:34.060903\t513100.SSE历史数据加载完成，数据量：0\n",
      "2023-09-01 15:14:34.061903\t518880.SSE历史数据加载完成，数据量：0\n",
      "2023-09-01 15:14:34.062903\t510880.SSE历史数据加载完成，数据量：0\n",
      "2023-09-01 15:14:34.063903\t159915.SZSE历史数据加载完成，数据量：0\n",
      "2023-09-01 15:14:34.063903\t所有历史数据加载完成\n",
      "2023-09-01 15:14:34.064903\t策略初始化完成\n",
      "2023-09-01 15:14:34.064903\t开始回放历史数据\n",
      "2023-09-01 15:14:34.064903\t历史数据回放结束\n",
      "2023-09-01 15:14:34.064903\t开始计算逐日盯市盈亏\n",
      "2023-09-01 15:14:34.064903\t成交记录为空，无法计算\n",
      "2023-09-01 15:14:34.064903\t开始计算策略统计指标\n",
      "2023-09-01 15:14:34.064903\t------------------------------\n",
      "2023-09-01 15:14:34.064903\t首个交易日：\t\n",
      "2023-09-01 15:14:34.064903\t最后交易日：\t\n",
      "2023-09-01 15:14:34.064903\t总交易日：\t0\n",
      "2023-09-01 15:14:34.064903\t盈利交易日：\t0\n",
      "2023-09-01 15:14:34.064903\t亏损交易日：\t0\n",
      "2023-09-01 15:14:34.064903\t起始资金：\t1,000,000.00\n",
      "2023-09-01 15:14:34.064903\t结束资金：\t0.00\n",
      "2023-09-01 15:14:34.064903\t总收益率：\t0.00%\n",
      "2023-09-01 15:14:34.064903\t年化收益：\t0.00%\n",
      "2023-09-01 15:14:34.064903\t最大回撤: \t0.00\n",
      "2023-09-01 15:14:34.064903\t百分比最大回撤: 0.00%\n",
      "2023-09-01 15:14:34.064903\t最长回撤天数: \t0\n",
      "2023-09-01 15:14:34.064903\t总盈亏：\t0.00\n",
      "2023-09-01 15:14:34.064903\t总手续费：\t0.00\n",
      "2023-09-01 15:14:34.064903\t总滑点：\t0.00\n",
      "2023-09-01 15:14:34.064903\t总成交金额：\t0.00\n",
      "2023-09-01 15:14:34.064903\t总成交笔数：\t0\n",
      "2023-09-01 15:14:34.064903\t日均盈亏：\t0.00\n",
      "2023-09-01 15:14:34.064903\t日均手续费：\t0.00\n",
      "2023-09-01 15:14:34.064903\t日均滑点：\t0.00\n",
      "2023-09-01 15:14:34.064903\t日均成交金额：\t0.00\n",
      "2023-09-01 15:14:34.064903\t日均成交笔数：\t0\n",
      "2023-09-01 15:14:34.064903\t日均收益率：\t0.00%\n",
      "2023-09-01 15:14:34.064903\t收益标准差：\t0.00%\n",
      "2023-09-01 15:14:34.064903\tSharpe Ratio：\t0.00\n",
      "2023-09-01 15:14:34.064903\t收益回撤比：\t0.00\n",
      "2023-09-01 15:14:34.064903\t策略统计指标计算完成\n"
     ]
    }
   ],
   "source": [
    "engine.load_data()\n",
    "engine.run_backtesting()\n",
    "engine.calculate_result()\n",
    "engine.calculate_statistics()\n",
    "engine.show_chart()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-09-01T07:14:39.066266900Z",
     "start_time": "2023-09-01T07:14:34.092908100Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2023-09-01 15:14:34.080914\t开始执行穷举算法优化\n",
      "2023-09-01 15:14:34.080914\t参数优化空间：384\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 384/384 [00:03<00:00, 99.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2023-09-01 15:14:38.356429\t穷举算法优化完成，耗时4秒\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 5}, 目标：0\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 6}, 目标：0\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 7}, 目标：0\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 8}, 目标：0\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 9}, 目标：0\n",
      "2023-09-01 15:14:39.046264\t参数：{'holding_size': 1, 'regression_window': 10}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 11}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 12}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 13}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 14}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 15}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 16}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 17}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 18}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 19}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 20}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 21}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 22}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 23}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 24}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 25}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 26}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 27}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 28}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 29}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 30}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 31}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 32}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 33}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 34}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 35}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 36}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 37}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 38}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 39}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 40}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 41}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 42}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 43}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 44}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 45}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 46}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 47}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 48}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 49}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 50}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 51}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 52}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 53}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 54}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 55}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 56}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 57}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 58}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 59}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 60}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 61}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 62}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 63}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 64}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 65}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 66}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 67}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 68}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 69}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 70}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 71}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 72}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 73}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 74}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 75}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 76}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 77}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 78}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 79}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 80}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 81}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 82}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 83}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 84}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 85}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 86}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 87}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 88}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 89}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 90}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 91}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 92}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 93}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 94}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 95}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 96}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 97}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 98}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 99}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 1, 'regression_window': 100}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 5}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 6}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 7}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 8}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 9}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 10}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 11}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 12}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 13}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 14}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 15}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 16}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 17}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 18}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 19}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 20}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 21}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 22}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 23}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 24}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 25}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 26}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 27}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 28}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 29}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 30}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 31}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 32}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 33}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 34}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 35}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 36}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 37}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 38}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 39}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 40}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 41}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 42}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 43}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 44}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 45}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 46}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 47}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 48}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 49}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 50}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 51}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 52}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 53}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 54}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 55}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 56}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 57}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 58}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 59}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 60}, 目标：0\n",
      "2023-09-01 15:14:39.047267\t参数：{'holding_size': 2, 'regression_window': 61}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 62}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 63}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 64}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 65}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 66}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 67}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 68}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 69}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 70}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 71}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 72}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 73}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 74}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 75}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 76}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 77}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 78}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 79}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 80}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 81}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 82}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 83}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 84}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 85}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 86}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 87}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 88}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 89}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 90}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 91}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 92}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 93}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 94}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 95}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 96}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 97}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 98}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 99}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 2, 'regression_window': 100}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 5}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 6}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 7}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 8}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 9}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 10}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 11}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 12}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 13}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 14}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 15}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 16}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 17}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 18}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 19}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 20}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 21}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 22}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 23}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 24}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 25}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 26}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 27}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 28}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 29}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 30}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 31}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 32}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 33}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 34}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 35}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 36}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 37}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 38}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 39}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 40}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 41}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 42}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 43}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 44}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 45}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 46}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 47}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 48}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 49}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 50}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 51}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 52}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 53}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 54}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 55}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 56}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 57}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 58}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 59}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 60}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 61}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 62}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 63}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 64}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 65}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 66}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 67}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 68}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 69}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 70}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 71}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 72}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 73}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 74}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 75}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 76}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 77}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 78}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 79}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 80}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 81}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 82}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 83}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 84}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 85}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 86}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 87}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 88}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 89}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 90}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 91}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 92}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 93}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 94}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 95}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 96}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 97}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 98}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 99}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 3, 'regression_window': 100}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 5}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 6}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 7}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 8}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 9}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 10}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 11}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 12}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 13}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 14}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 15}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 16}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 17}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 18}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 19}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 20}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 21}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 22}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 23}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 24}, 目标：0\n",
      "2023-09-01 15:14:39.048265\t参数：{'holding_size': 4, 'regression_window': 25}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 26}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 27}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 28}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 29}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 30}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 31}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 32}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 33}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 34}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 35}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 36}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 37}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 38}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 39}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 40}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 41}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 42}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 43}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 44}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 45}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 46}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 47}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 48}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 49}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 50}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 51}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 52}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 53}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 54}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 55}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 56}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 57}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 58}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 59}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 60}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 61}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 62}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 63}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 64}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 65}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 66}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 67}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 68}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 69}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 70}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 71}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 72}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 73}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 74}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 75}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 76}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 77}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 78}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 79}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 80}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 81}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 82}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 83}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 84}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 85}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 86}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 87}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 88}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 89}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 90}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 91}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 92}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 93}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 94}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 95}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 96}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 97}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 98}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 99}, 目标：0\n",
      "2023-09-01 15:14:39.049266\t参数：{'holding_size': 4, 'regression_window': 100}, 目标：0\n"
     ]
    }
   ],
   "source": [
    "setting = OptimizationSetting()\n",
    "setting.set_target(\"sharpe_ratio\")\n",
    "setting.add_parameter(\"holding_size\", 1, 4, 1)\n",
    "setting.add_parameter(\"regression_window\", 5, 100, 1)\n",
    "result = engine.run_optimization(setting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-09-01T07:14:39.087267900Z",
     "start_time": "2023-09-01T07:14:39.060269100Z"
    }
   },
   "outputs": [],
   "source": [
    "d = {}\n",
    "for i in range(len(result)):\n",
    "    d.setdefault(\"holding_size\", []).append(eval(result[i - 1][0])[\"holding_size\"])\n",
    "    d.setdefault(\"regression_window\", []).append(eval(result[i - 1][0])[\"regression_window\"])\n",
    "    d.setdefault(\"sharpe_ratio\", []).append(result[i - 1][1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-09-01T07:14:39.760267200Z",
     "start_time": "2023-09-01T07:14:39.089268200Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\cjie\\AppData\\Local\\Temp\\ipykernel_8640\\976866176.py:2: FutureWarning: In a future version of pandas all arguments of DataFrame.pivot will be keyword-only.\n",
      "  pd.DataFrame(d)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<AxesSubplot:xlabel='regression_window', ylabel='holding_size'>"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 2 Axes>",
      "image/png": "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tiU3NxcA0L9/fzx+/BhLly5FQkICli5dipycHAwYMAAAsGDBAjRu3Bj+/v54+PAh0tPTpeNbtGiBZs2aYf78+fjjjz8QExOD+fPnY8SIEahTp47exlAmquClODG2Qyq6C0REVEm43d5v8HPc691dL+00/Olnrern5OQgMDAQP/74IywsLODj4wNvb28AgL29PYKDg6U70l64cAELFy5EYmIi7O3tsWjRIrRp0wbp6enw9PQstv2i41NSUrB06VJER0ejWrVqGDRoEGbNmlViuqo8GLAQEdFLrSoHLFUJH35IRERkYPq6SuhlxoCFiIjI0ATvK6YrPkuIiIiIjF65Z1iSk5Px73//G7du3UJgYCBOnTqF1157DW5ubvrsHxERUaXHlJDuyjXDcvbsWQwePBh37tzBL7/8gry8PCQlJcHb2xs//vijvvtIRERUqYlCmV62l1m5ApaVK1fik08+werVq2Fq+mySZtasWZgxYwZWr16t1w4SERERlStg+eOPP9C9u/olWr1798Zff/2lc6eIiIiqkoq4cVxVU66ApUmTJrh48aJa+cmTJ9GkSROdO0VERFSVCCHTy/YyK9ei248//hhz5szBxYsX8fTpU+zfvx+3b9/GoUOHEBISou8+EhERVWov++yIPpRrhqVv377Yvn077t+/j9dffx0//fQTlEoltm/fjoEDB+q7j0RERPSSK9cMS0pKClq3bq02m5KXl4f9+/djyJAh+ugbERFRlfCyX+GjD+WaYenVqxemT5+O7OxslfInT57A399fLx0jIiKqKoTQz/YyK1fAIoRAcnIyhg4diuvXr+u7T0REREQqyhWwyGQyrFu3Dn379sWoUaOwZ88eqZyIiIhU8cZxuivXGhYhBExMTDBjxgw4OTnB398fMTExmD59ur77R0REVOm97MGGPuj88MM+ffpgz549uHLlCnx8fPTRJyIiIiIV5QpYOnTogOrVq0uvmzVrhm+//RYODg4QL/uqICIiohdw0a3uZKIKRhgxtkMqugtERFRJuN3eb/BzJLXrp5d2Wlx8eR8wrPEalnHjxiEsLAy1a9fGuHHjSqwnk8mwZcsWvXSOiIiICNAiYHF3d5fSQO7u7gbrEBERUVXzsj8HSB/0lhJ68OAB6tWrZxSXNjMlREREmvonUkIJbd7QSzutrhzVSzuVUbkW3aalpWH69Om4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nMq16LZnz5748ccf9d0XIiKiKklAppftZVauGRZra2t89tln+OGHH9CsWTO15wUVLeghIiIi0odyBSyPHj3CW2+9pe++EBERVUmFFfDww6qmXAELZ1CIiIg0V/iSp3P0QeOAJSwsDD4+PqhRowbCwsJKrevn56dzx4iIiIiKaBywREdHY9y4cahRowaio6NLrKfPa66JiIiqgpd9waw+aBywfPPNN8X+TERERKXjZc260zhg2b9/v8aNDhkypBxdISIiIiqexgHL6tWrVV6npKTAzMwMTZs2RfXq1XHr1i3k5eWhdevWDFiIiIiew5SQ7jQOWI4fPy79/OWXX+LixYtYtmwZ6tatC+DZwxAXLFiABg0a6L2TRERElRlTQror151uN27ciE8++UQKVgDAwsICfn5+2LPn5X3OARERERlGuQKWV155BVeuXFErj42NRf369XXuFBERUVVSqKftZVauG8f5+voiICAA0dHRcHBwgBACFy9exA8//MCbyhEREb2Aa1h0V66AZdSoUWjSpAn27NmDHTt2AABef/11bNq0CW5ubnrtIBERUWVXyHhFZ+UKWACga9eu6Nq1qz77QkRERFQsjQMWf39/jRtlWoiIiOh/+Cwh3ZV7hoWIiIg0w4c1607jgIWzJkRERFRRyj3DEhUVhQ0bNiApKQlPnz5F8+bNMWbMGN7lloiI6AUv+yXJ+lCugGXnzp1YsWIFxowZg0mTJqGwsBDnzp3DokWLkJ+fjxEjRui7n0RERJVWoYxrWHRVroBlw4YNWLhwocpsSp8+ffD666/jq6++YsBCREREelWugOX+/ftwcnJSK3d2dkZKSoqufSIiIqpSuOhWd+W6Nb+DgwP279+vVr5v3z60atVK1z4RERFVKbw1v+7KNcMyc+ZMeHt7Izo6GgqFAgAQFxeHq1evIjw8XK8dJCIiIirXDIuzszMiIyOhUCiQlJSEO3fuwN3dHUePHkXHjh313UciIqJKrVCmn+1lVq4ZlidPnuC7775DUlIScnNzkZOTg7i4OMTFxQEAtm7dqs8+EhERVWq8063uyhWwzJo1C5cvX8aAAQPwyiuv6LtPREREVQoX3equXAHLb7/9hq1bt6J9+/b67g8RERGRmnIFLFZWVjAxMdF3X4iIiKqkl339iT5oHLDcvXtX+vlf//oX5s2bh1mzZsHW1lYteLGxsdFfD4mIiCq5l/2SZH3QOGDp1asXZP+9tbAQz7JxEyZMkMqKymUyGa5evarnbhIREdHLTOOA5aeffjJkP4iIiKosLrrVncYBS5MmTQzZDyIioiqLa1h0V64bxxEREVHlJoRAaGgoOnbsCHd3d4SEhKCwsOTVNsnJyfD29oaTkxMGDhyI06dPq+zfu3cv+vfvD2dnZ4wYMQKxsbHSvkePHsHe3l5l8/Dw0Kq/5bpKiIiIiDRnjItuIyIicPDgQYSFhaGgoAAzZ86EpaUlfHx81OoKITBlyhTY2dlh7969iIqKgp+fHw4fPgwbGxucOnUKixcvRlBQEBQKBfbt24dJkybh8OHDsLa2RkJCAurWrYuDBw9KbVarpt2ciVHNsBQUFCAzM7Oiu0FERKRXxvjww61bt2LatGlwc3NDx44dMWPGDGzfvr3YumfOnEFycjIWL16Mli1bwtfXF05OTti7dy+AZw8/HjJkCAYPHoxmzZrh448/RoMGDfDzzz8DAJKSktC8eXNYWVlJm6WlpVb9rbAZlkOHDiE2NhYeHh7o168fli5dim+//Rb5+fmoX78+PvzwQ4wZM6aiukdERFRlpaWlISUlBR06dJDKXF1dcefOHdy7dw8NGzZUqR8fH482bdqgZs2aKvWLHsnz3nvvoVatWmrnefLkCQAgISEBr732mk59rpCAZePGjfjyyy/RqVMnLFy4EPv378fVq1excuVKtGrVChcvXkRoaCiys7MxadKkiugiERGR3gg9LbpVKpVQKpUqZWZmZjAzM9OqnfT0dABQCUwaNGgAAEhNTVULWNLT09XKLC0tkZqaCgBwdHRU2Xfq1Cn8+eef0gORExMTUVBQgOHDhyMtLQ1ubm7w9/dXa7M0FRKwbN++HZ9++im6deuG2NhYjBkzBl999RW6d+8OAGjZsiXq1auH+fPnM2AhIqJKT1/pnPDwcISFhamU+fn5YerUqWp1c3NzkZaWVmw72dnZAKAS6BT9/GJABAA5OTlqQZGZmVmxdf/66y/4+/tj0KBBUiCTlJSE+vXrw9/fH0IIfPbZZ/jggw+we/duje+cXyEBy8OHD6WpIVdXVzRu3FiK7IrY2toiJyenAnpHRESkX/oKWHx9fTFhwgSVspJmV+Lj4zFu3Lhi982cORPAs+BELpdLPwNAjRo11OrL5XK1NaZKpRLm5uYqZTdv3sSECRPQtGlTLFmyRCo/dOgQZDKZVH/16tXw9PREfHw8XFxcSnq7KiokYHFxccHatWuxcOFC1KxZE8ePH1fZf+/ePQQHB6NTp04V0T0iIiKjpE36x8PDA9evXy92X1paGlauXIn09HTY2toC+F+ayMrKSq1+0ZU+z8vIyFBJ6dy4cQPe3t5o2rQpNmzYoBLMvBgEWVpaom7duiXOABWnQq4SWrhwIeLj4zFv3jy1fVFRUejevTsePXqE+fPnV0DviIiI9EvoadMXa2tr2NjYqNwrJTY2FjY2NsWuK1EoFLh8+TJyc3NV6isUCgDPJhomTpyIZs2aYePGjbCwsJDqZWVloUOHDjhz5oxUlpaWhocPH6JFixYa97lCZlheffVV/PDDD8jIyFDb5+zsjJ07d6Jdu3ZaX6NNRERkjIzxTrejR49GaGgoGjVqBABYtWoVJk6cKO1/8OAB5HI5atWqBXd3dzRu3Bj+/v6YPHkyTpw4gQsXLiA4OBgAsGLFChQWFmLp0qXIzs6W1sjUrFkTFhYWcHV1RXBwMIKCgmBiYoKlS5eia9eusLe317i/MlH0JMMqJMZ2SEV3gYiIKgm32/sNfo4vXtXPbTo++mubXtoBgKdPnyIkJASRkZEwMTHB8OHD8cknn0gPNe7VqxeGDh0qLei9desWAgICEB8fj2bNmmHu3Lno3LkzhBBwcnJSmX0pUrQg+NGjR1i+fDlOnDgBpVKJ3r17Y968eahTp47G/WXAQkREL7V/ImD5TE8By3Q9BiyVDW/NT0REZGDGeGv+yoaLRIiIiMjocYaFiIjIwKrc2osKwICFiIjIwIzxKqHKhikhIiIiMnqcYSEiIjIwLrrVHQMWIiIiA+MaFt0xYCEiIjKwQoYsOuMaFiIiIjJ6nGEhIiIyMK5h0R0DFiIiIgNjQkh3TAkRERGR0eMMCxERkYExJaQ7BixEREQGxjvd6o4pISIiIjJ6nGEhIiIyMN6HRXcMWIiIiAyM4YrumBIiIiIio8cZFiIiIgPjVUK6Y8BCRERkYFzDojsGLERERAbGcEV3XMNCRERERo8zLERERAbGNSy6Y8BCRERkYFzDojumhIiIiMjocYaFiIjIwDi/ojsGLERERAbGNSy6Y0qIiIiIjB5nWIiIiAxMMCmkMwYsREREBsaUkO6YEiIiIiKjxxkWIiIiA+N9WHTHgIWIiMjAGK7ojgELERGRgXGGRXdcw0JERPQSEkIgNDQUHTt2hLu7O0JCQlBYWPLy4OTkZHh7e8PJyQkDBw7E6dOnVfYPHjwY9vb2Ktsff/xRrnMVhzMsREREBmaMVwlFRETg4MGDCAsLQ0FBAWbOnAlLS0v4+Pio1RVCYMqUKbCzs8PevXsRFRUFPz8/HD58GDY2Nnj69Cn+/PNPbNu2Da+99pp0XL169bQ+V0k4w0JERGRgQk//6dPWrVsxbdo0uLm5oWPHjpgxYwa2b99ebN0zZ84gOTkZixcvRsuWLeHr6wsnJyfs3bsXAHD79m3k5+ejffv2sLKykjZTU1Otz1USBixEREQvmbS0NKSkpKBDhw5SmaurK+7cuYN79+6p1Y+Pj0ebNm1Qs2ZNlfpxcXEAgISEBDRu3BhyuVznc5WEAQsREZGBFeppUyqVyMrKUtmUSqXW/UlPTwcANGzYUCpr0KABACA1NbXY+s/XBQBLS0upbmJiIqpXrw5fX1906dIFY8aMwYULF8p1rpJwDQsREZGB6SudEx4ejrCwMJUyPz8/TJ06Va1ubm4u0tLSim0nOzsbAGBmZiaVFf1cXACUk5OjUreoflHdmzdv4tGjRxgxYgSmTZuGb7/9FuPHj8fhw4eRm5ur1blKwoCFiIiokvD19cWECRNUyl4MJIrEx8dj3Lhxxe6bOXMmgGcBQ1Eapyh4qFGjhlp9uVyOzMxMlTKlUglzc3MAQFBQEHJzc2FhYQEACAwMxLlz5/Ddd9+hc+fOWp2rJAxYiIiIDExfVwmZmZmVGKC8yMPDA9evXy92X1paGlauXIn09HTY2toC+F/qxsrKSq2+tbU1EhISVMoyMjKkNI+pqakUrACATCZDixYtkJaWBmtra6l9Tc5VEq5hISIiMrBCIfSy6Yu1tTVsbGwQGxsrlcXGxsLGxkZtrQoAKBQKXL58WUrvFNVXKBQAgLFjx6qkqgoLC3H9+nW0aNFC63OVhDMsREREL6HRo0cjNDQUjRo1AgCsWrUKEydOlPY/ePAAcrkctWrVgru7Oxo3bgx/f39MnjwZJ06cwIULFxAcHAwA6NWrF9auXQsHBwc0b94cW7duxZMnTzB06FCNzqUJBixEREQGZow35vfx8cH9+/fh5+cHExMTDB8+HN7e3tL+4cOHY+jQoZg6dSpMTEywbt06BAQEwMvLC82aNcPatWthY2MDAPD29kZeXh6WLFmCjIwMKBQKRERESGmiss6lCZkQepxjMhIxtkMqugtERFRJuN3eb/BzvNtsqF7a+fetfXpppzLiDAsREZGB6fsutS8jLrolIiIio8cZFiIiIgMzxocfVjYMWIiIiAyskCkhnTElREREREaPMyxEREQGxkW3umPAQkREZGBcw6I7poSIiIjI6HGGhYiIyMCq4D1a/3EMWIiIiAyMVwnpjikhIiIiMnqcYSEiIjIwLrrVHQMWIiIiA+NlzbpjwEJERGRgXMOiO65hISIiIqPHGRYiIiID42XNumPAQkREZGBcdKs7poSIiIjI6HGGhYiIyMB4lZDuGLAQEREZGK8S0h1TQkRERGT0OMNCRERkYLxKSHcMWIiIiAyMKSHdMSVERERERo8zLERERAbGq4R0x4CFiIjIwAq5hkVnDFiIiIgMjOGK7riGhYiIiIweZ1iIiIgMjFcJ6Y4BCxERkYExYNEdU0JERERk9DjDQkREZGC8063uGLAQEREZGFNCumNKiIiIiIweAxYiIiIDE3r6T699EgKhoaHo2LEj3N3dERISgsLCwhLrJycnw9vbG05OThg4cCBOnz4t7evVqxfs7e3VtrCwMADAlStX1PZ5eXlp1V+mhIiIiAzMGNewRERE4ODBgwgLC0NBQQFmzpwJS0tL+Pj4qNUVQmDKlCmws7PD3r17ERUVBT8/Pxw+fBg2NjbYs2cPnj59KtU/evQoPv/8cwwdOhQAkJCQAAcHB3z99ddSHVNT7UIQBixEREQGZoxrWLZu3Ypp06bBzc0NADBjxgx88cUXxQYsZ86cQXJyMnbu3ImaNWuiZcuW+O2337B3715MnToV9evXl+o+efIEa9euxezZs9GkSRMAQGJiIlq2bAkrK6ty95cpISIiopdMWloaUlJS0KFDB6nM1dUVd+7cwb1799Tqx8fHo02bNqhZs6ZK/bi4OLW6GzduhJWVFYYNGyaVJSYm4rXXXtOpz0YXsLi4uCA5Obmiu0FERKQ3Qgi9bEqlEllZWSqbUqnUuj/p6ekAgIYNG0plDRo0AACkpqYWW//5ugBgaWmpVjcnJwfbtm3DBx98gGrV/hdiJCYm4urVqxg0aBB69OiBBQsWICsrS6s+V0hKyN/fv8R9SqUSK1euRK1atQAAwcHB/1S3iIiIDEJfKaHw8HBpIWsRPz8/TJ06Va1ubm4u0tLSim0nOzsbAGBmZiaVFf1cXACUk5OjUreo/ot1Dx8+jJo1a6Jfv35SWX5+PpKTk2Fra4tly5bh8ePHCA4OxsyZM/Hll1+W9nZVVEjAcv/+fZw6dQrt27dHy5YtK6ILRERElY6vry8mTJigUvZiIFEkPj4e48aNK3bfzJkzATwLTuRyufQzANSoUUOtvlwuR2ZmpkqZUqmEubm5StnRo0cxcOBAlQW11atXx5kzZyCXy1G9enUAwPLlyzFs2DCkpaXB2tq6pLerokIClvXr1+PQoUNYuXIlOnXqhClTpkgDfuTIEcycORNNmzatiK4RERHpnb4uSTYzMysxQHmRh4cHrl+/Xuy+tLQ0rFy5Eunp6bC1tQXwvzRRcQtjra2tkZCQoFKWkZGhkiZSKpX4/fffMWnSJLXjLSwsVF4XTVZoE7BU2BqWN998E9999x3S09MxaNAg/PrrrxXVFSIiIoMqFEIvm75YW1vDxsYGsbGxUllsbCxsbGzU1qoAgEKhwOXLl5Gbm6tSX6FQSK+vX7+OgoICtG/fXuXYhIQEODs7q6xPvXr1KkxNTdGsWTON+1yhlzXXqVMHy5Ytw2+//YbAwEC0bdvWKK9VJyIiqmpGjx6N0NBQNGrUCACwatUqTJw4Udr/4MEDyOVy1KpVC+7u7mjcuDH8/f0xefJknDhxAhcuXFBZZ3rjxg3Y2tqqzQC1aNECzZo1w/z58zF37lw8fvwYCxcuxIgRI1CnTh2N+2sUVwl16tQJBw4cgI2NDSwtLbW+mQwREZExM8Y73fr4+GDgwIHw8/PDRx99hLfffhve3t7S/uHDh2PTpk0AABMTE6xbtw7p6enw8vLC999/j7Vr18LGxkaqn5GRUWwAUq1aNXz55ZewsLDAv/71L0yZMgWdOnXC3LlzteqvTFTBKY0Y2yEV3QUiIqok3G7vN/g5HBq666Wdq/d+10s7lZFRzLAQERERlYa5FyIiIgPTdzrnZcSAhYiIyMD0eYXPy4oBCxERkYFxhkV3XMNCRERERo8zLERERAbGlJDuGLAQEREZGFNCumNKiIiIiIweZ1iIiIgMTIjCiu5CpceAhYiIyMAKmRLSGVNCREREZPQ4w0JERGRgVfCxff84BixEREQGxpSQ7pgSIiIiIqPHGRYiIiIDY0pIdwxYiIiIDIx3utUdAxYiIiID451udcc1LERERGT0OMNCRERkYFzDojsGLERERAbGy5p1x5QQERERGT3OsBARERkYU0K6Y8BCRERkYLysWXdMCREREZHR4wwLERGRgTElpDsGLERERAbGq4R0x5QQERERGT3OsBARERkYU0K6Y8BCRERkYLxKSHcMWIiIiAyMDz/UHdewEBERkdHjDAsREZGBMSWkOwYsREREBsZFt7pjSoiIiIiMHmdYiIiIDIyLbnXHGRYiIiIDE0LoZdN3n0JDQ9GxY0e4u7sjJCQEhYWFZR5369YttG/fXq38119/xVtvvQWFQoFx48YhOTlZZf/mzZvRtWtXODs7Y+7cucjJydGqvwxYiIiIXkIRERE4ePAgwsLCsHr1ahw4cAARERGlHpOSkgJfX1/k5eWplN+9exdTpkyBl5cX9uzZg/r162Py5MlSkHX06FGEhYVh8eLF2LJlC+Lj47Fy5Uqt+suAhYiIyMCMcYZl69atmDZtGtzc3NCxY0fMmDED27dvL7F+VFQUvLy8YGZmprZv9+7daNu2LSZOnIjXX38dwcHBuHPnDn7//XfpXOPHj0fPnj3Rvn17LFq0CHv37tVqloUBCxERkYEJPW36kpaWhpSUFHTo0EEqc3V1xZ07d3Dv3r1ijzl58iQ++ugjBAQEqO2Lj4+Hm5ub9LpGjRpwdHREXFwcnj59iosXL6rsd3JyQn5+Pq5du6Zxn7noloiIqJJQKpVQKpUqZWZmZsXOepQmPT0dANCwYUOprEGDBgCA1NRUlfIiS5YsAQBER0cX296Lx1haWiI1NRWPHz9GXl6eyn5TU1PUrVsXqampGve5SgYsbrf3V3QXiIiIJAXKO3ppZ82aNQgLC1Mp8/Pzw9SpU9Xq5ubmIi0trdh2srOzAUAl0Cn6+cWASBM5OTlqQZOZmRmUSiVyc3PVzvX8fk1VyYCFiIioKvL19cWECRNUykqaXYmPj8e4ceOK3Tdz5kwAz4ITuVwu/Qw8S+doSy6XqwUfSqUStWvXVmv/+f3anIsBCxERUSWhTfrHw8MD169fL3ZfWloaVq5cifT0dNja2gL4X5rIyspK635ZW1sjIyNDpSwjIwMODg6oW7cu5HI5MjIy0LJlSwBAQUEBMjMztToXF90SERG9ZKytrWFjY4PY2FipLDY2FjY2NsWuXymLQqFQaSsnJwdXrlyBQqFAtWrV0K5dO5X9cXFxMDU1RevWrTU+B2dYiIiIXkKjR49GaGgoGjVqBABYtWoVJk6cKO1/8OAB5HI5atWqVWZbw4YNw8aNG7F+/Xr07NkTa9euha2tLTw8PAAA7777LhYsWAA7Ozs0bNgQgYGBGDlyJFNCREREVDofHx/cv38ffn5+MDExwfDhw+Ht7S3tHz58OIYOHVrsgt4X2draYs2aNVi2bBnWrl0LZ2dnrF27FjKZDADw5ptv4s6dO1iwYAGUSiX69esnraPRlEzwEZJERERk5LiGhYiIiIweAxYiIiIyegxYiIiIyOhVyYDl2LFjsLe3V9mmTZumVRv379+XHgrVt29fREZGanScUqnEW2+9pXLr4l9++QWDBw9G+/btMXjwYPz8889atTFnzhy192Nvb692Q6C0tDRMmzYN7u7u6Nq1K4KDg9WeqFnSY8E1aWPJkiVqfdi2bZvGx1+6dAnvvPMOnJ2dMXLkSMTFxRXbh1u3bsHHxwfOzs7o0aMHNmzYoPVYltSGpmP5vEmTJmHOnDlq5TExMejdu3eJx5V0/Icffqh2/hMnTmjVxunTpzF48GA4OzvD29sbSUlJxR5X2mfh+++/xxtvvIH27dtj1KhRuHDhgsbHjx07tthx9Pf3V2tDqVRi0aJF6NChAzp37oxPP/1U7SFupY1lacdrOpaltVHWWEZGRhb7Xosux9RkHEtrQ9OxLHpKrouLC3r16oXNmzernaes38nS2tBkLEs7XtPfydK+WzX9fJfURnk+31SJiCpo3bp1wtfXV9y7d0/aHj16pPHxhYWF4p133hEjRowQly9fFsePHxcdOnQQR48eLfW43NxcMWXKFGFnZyfOnDkjhBDizz//FO3btxcRERHir7/+Eps2bRKOjo4iOTlZ4zYeP36s8l7Onz8v2rZtK44dO6bS55EjR4r33ntP/PHHH+Ls2bOib9++Yvny5VKdu3fvijfeeEPY2dmV+L5La8Pb21uEh4er9CU7O1uj4zMyMoSrq6uYN2+eSEhIEBEREcLJyUncuXNHpQ9Pnz4V/fr1E5988om4efOmOHnypHBxcRHff/+9xmNZWhuajOXzDh48KOzs7MTs2bNVyq9duyY6d+4sevbsWexxpR3ft29f8d1336n0Iy8vT+M2/vjjD9GmTRvx+eefi8TERLFixQrh6ekpsrKy1I4t6bNw9uxZ0bZtW7F//37x119/ieXLlwt3d3e1Nko6/uHDhyplx44dE46OjuLChQtqfZg/f77o16+fiI+PF7/++qvw8PAQO3bs0HgsSzte07EsqQ1NxjInJ0el/bt374q+ffuKpUuXajyOpbWh6ViOHDlSfPzxx+LmzZvi2LFjQqFQiB9//FHjcSyrDU3GsqTjNf2dLO27VdPPd2ltaPv5psqlSgYsn3zyiVi1alW5j79w4YKws7MTf/31l1QWHh4uRo4cWeIxN27cEIMHDxaDBg1SCTbOnDkjlixZolK3Q4cO4tChQxq38aKJEyeKGTNmqJQlJCQIOzs7kZ6eLpUdOHBAeHp6CiGEOHbsmOjYsaPUdnHKaqNr167il19+KXEMSjt+w4YNonfv3qKgoEDa5+PjI0JDQ1XaSEtLEx999JF48uSJVDZlyhSxcOFCjceytDZeVNxYFnn48KHo1q2bGDZsmErAsWPHDuHk5CQGDRpU6h+H4o7Py8sTDg4OIikpqcTjympj0aJF4l//+pdUp7CwUAwYMEAlCChS0mfh8OHDYt26ddLrJ0+eCDs7OxEfH6/R8c8rKCgQAwcOFJ999lmx/W/Tpo2Ijo6WysLDw8WcOXOEEGWPZWnHazqWpbWhzVgW+eqrr0SfPn1EXl6exuNYWhvPK2ksMzMzhZ2dnbh+/bpU5ufnJxYtWiSE0Ox3srQ2NBnL0o7XdBxL+27V9POtzfdzaZ9vqnyqZEooMTERr732WrmPT05ORv369dG0aVOpzN7eHpcuXUJ+fn6xx/z+++/w8PDArl27VMo9PDykR3Hn5+dj9+7dUCqVxaZlSmrjeb/99hvOnj2L//u//1Mpt7KywoYNG6SnbRbJysoCUPpjwTVpIysrC2lpaaWOa2nHJycnw9HRESYmJlK5vb29WlqoYcOG+Pzzz2FhYQEhBGJjY3H27Fm4u7trPJaltfG8ksayyIoVK/D222+jVatWKuWnTp3CihUrVO5XoOnxSUlJkMlkKr9b2raRnJys8p5lMhns7OyKTbGV9FkYMGAAPvzwQwDPHpC2efNmWFpaSrfNLuv450VGRuLRo0d4//331fbFxsbCwsJCZewnTZqE4OBgAGWPZWnHazqWpbWhzVgCQGZmJr7++mt88sknMDMz03gcS2vjeSWNpbm5OWrUqIHIyEjk5+cjKSkJ586dg4ODAwDNfidLa0OTsSzteE3HsbTvVhcXF40+35p+P5f1+abKp8oFLEII3Lx5E6dPn8Ybb7yBPn36IDQ0VKsnQjZo0ABPnjxBTk6OVJaamoqCggI8efKk2GPeffddzJ07t8S79t26dQsKhQLz5s3D5MmTpWc3aNMGAKxfvx5Dhw5F48aNVcpr166Nrl27Sq8LCwuxbds2dOzYEcCz9SejRo0q+U2X0UZiYiJkMhm++uordOvWDYMHD8a+ffs0Pr5BgwZqTw1NTU3Fw4cPS+xPr1698O6778LZ2RlvvPGGVK7JWJbVBlDyWALPvuxiYmIwefJktX3r1q1Dv379SjxnaccnJSXBwsICs2bNgqenJ4YPH15inr6kNjQdS00+C7/99hucnZ0RFhaGuXPnqtzRUpPjhRDYsGEDxo0bV+zdMJOTk9GkSRPs378f/fv3R+/evbF27VoUFhYCKHssSzte07EsrQ1tfy937NiBhg0bon///irlpY2jpm2UNpZyuRwLFizArl27oFAoMGDAAHTr1g0jRozQaBzLakOTsSzteE3HUZPv1rI+35p+P5f2+abKqcoFLHfv3pUec/35559j9uzZOHDgAEJCQjRuQ6FQoGHDhggKCkJ2djZu3bqFiIgIAChxhqUs9evXx549e7BgwQKsWbMGR48e1bqN5ORknDlzBmPHji2z7sqVK3HlyhVMnz69PN1Va6PoX2AtWrTA+vXrMWLECMyfPx/Hjh3T6Ph+/frhwoUL+Pbbb1FQUIBffvkFP/30U6njuXr1anz11Ve4evWq9C9yQLuxLKmN0sYyLy8PCxcuxIIFC2Bubl7WMGl1fFJSEnJzc+Hp6YkNGzage/fu+PDDD3Hx4kWN2xgwYACOHj2KEydOoKCgAPv27cPFixfVxlKTz8Lrr7+OyMhITJs2DXPmzFH5F7Emx0dHRyM1NRUjR44sdiyKPj87d+5EcHAwZs+ejW+++abYBaPaHq/pWJbWhqZjCTwLKHbv3o0xY8ao7SttHDVto6yxTExMRM+ePbFr1y4EBwfjyJEj+P777zUYxbLb0HQsSzpe03HU5Lu1rM+3Jm1o811JlUiFJaMM6OHDh6KwsFB6feTIEdGuXTuV9RNliY+PFz179hStW7cWXbp0EREREcLOzq7YhY0vKm39iRDP1iCMGTNG6za+/vprMXTo0DLPHxISIhwcHMSRI0fU9p05c6bENSyltVFYWCgePnyoUmfx4sViwoQJGvdhz549wsnJSbRu3VoMHTpULF++XKP388MPPwhHR8diF1NqMpbFtVHaWIaGhorp06dLr2fPnq226FYIIfbu3VvseoHSjn/69KnIzMxUqe/r6yvmzZunVR/WrVsnHB0dRevWrcX48eOFv7+/mDp1qlpftPksTJo0Se19lnV8YGCg8PPzU2urSHh4uLCzsxO3b9+WyiIiIkS/fv1U6pU0lqUdr+lYltUHTccyPj5etGnTRu2cLypuHDVpo7Sx/PXXX4W7u7vIycmRytatWyf69++vUq+kcSyrDU3Gsqw+aDOOmn63lvT5LqsNTb8rqXKpcjMsAFC3bl3p+QUA0LJlS+Tl5eHRo0cat9G+fXscP34cp06dwsmTJ9G8eXPUq1dPo4dAPe/GjRuIiYlRKWvZsmWpqZCS/PLLL2VeRhsUFISIiAisXLlSLQWiqeLakMlkqFu3rkq9Fi1aqE0Dl9aHYcOGISYmBj///DMiIyMhk8nUpnszMjIQFRWlUtaqVSvk5+cjLi5Oo7EsrY2iNT2ljeWhQ4cQFRUFZ2dnODs748CBAzhw4ACcnZ2Lra/N8dWqVUOdOnVU6hc3jmX14cMPP8S5c+dw+vRpbN68GX///TeaNGmi1peSPguXL1/G5cuXVeoWN5ZlfZbK+p20srKCXC5X6Vvz5s2RkpJS4jGaHq/pWJbVB03H8pdffoGbm5vKOS9cuKDROJbWxvP7ShrLS5cuoVmzZiqzbW3atMHdu3eLra9tG5qMZVl90HQcS/puvXv3rsbflWV9P2vyXUmVT5ULWH755Rd4eHio5DevXr2KunXron79+hq1kZmZidGjR+Phw4ewsrKCqakpTp48qbZoUxMnTpzAvHnzVO47cfnyZbRo0UKrdoQQuHjxIlxcXEqsExYWhp07d+LTTz/Fm2++qXVfS2vjiy++UFvQd+3aNbX3UdLxZ86cwfTp02FiYoKGDRtCCCH9v3re7du34efnp/ZFWb9+fcTFxWk0lqW1Ub9+/TLH8ptvvsGBAwewf/9+7N+/H7169UKvXr2wf//+0gdPg+PnzJmjdn+N4saxtDYOHjyIpUuXwszMDJaWlsjNzUV0dLTaWJb2WdizZw8+/fRTlfovjmVZn6UHDx4gOTkZrq6uJY6FQqFAXl4ebt68KZUlJSUV+4dM2+M1HcvS2tB0LIFnwcmLvzOajGNZbQAocywbNmyIW7duqawfSkpKKnX9ljZtaDKWpR2v6TiW9t2q6XdlWd/PmnxXUiVVgbM7BvHkyRPRtWtX8X//938iMTFRnDx5Unh6eor169dr1c7gwYOFv7+/+Ouvv8S3334r2rVrV+alikWeT+ekpKQIFxcXERISIm7evCm2bdsmHB0dxaVLlzRuQwghkpOThZ2dnbh3716x9RMSEoSDg4P47LPPVO5D8GL90lJCpbVRNJW9YcMGcevWLbF9+3bRtm1bce7cOY2OT01NFQqFQmzfvl389ddfYuHChaJr165q08AFBQXCy8tLTJw4Udy4cUOcPHlSdO7cWWzevFnjsSytDU3G8kXapoRKO/7o0aPC0dFR7Nu3T/z5559izZo1on379iXel6e4Ni5evCjatm0rjh49Km7evCkmT54shgwZIp4+fapyTGmfhUuXLok2bdqIzZs3i5s3b4ovvvhCODk5idTUVI2OF+LZ71K7du1UUkbFmTRpknjnnXfE1atXxalTp0THjh3Fli1bNB7Lko7XZixLakPTsRRCiJ49e4qDBw+qlGkyjmW1IUTZY/n48WPRpUsXMXPmTJGUlCR++ukn4e7urnbZcGnjWFobmoxlacdrM44lfbdq811Z2veztp9vqjyqXMAixLMba3l7ewsnJyfRpUsXsWbNmjK/VF+UmJgoxowZIxQKhXjzzTfF8ePHNT72xWDj/PnzYsSIEaJ9+/ZiwIABIioqSus24uLihJ2dXYk3GCvK0xe3Pa+0gKWsNo4dOyYGDRok2rVrJ/r37692I72yjj9x4oTo37+/UCgUYty4cSIhIaHYfqSmpoopU6YIFxcX0aVLF/Hll19K//80HcvS2ihrLF+kz4BFCCG+/fZb0a9fP9G2bVsxdOhQ8fvvv2vdxp49e0TPnj2Fs7OzmDx5skhLSyv2uNI+C8ePHxdvvfWWaNeunfDy8hKxsbFaHX/o0CHRpUuXMvv++PFjMXPmTOHk5CQ6depU7OexrD+0JR2v6ViW1oamY9muXTtx6tQptXJNxrGsNjQZyxs3bghvb2/h4uIi+vTpIyIiIrQax7La0GQsSzte03Es7btV0893aW1o+/mmykMmxAv3yCYiIiIyMlVuDQsRERFVPQxYiIiIyOgxYCEiIiKjx4CFiIiIjB4DFiIiIjJ6DFiIiIjI6DFgISIiIqPHgIWIiIiMHgMWokqqV69eiIyMrOhuSNasWYOxY8eW+3h7e3tER0frsUdEVJXwTrdEldSDBw9Qs2ZNlafnVqS///4b+fn5ak/11pS9vT22bt1a7IMHiYhMK7oDRFQ+mj59/J9Sq1atiu4CEVVhTAnRS+/27duwt7fH2rVr0aFDByxevBjHjh3DwIEDoVAoMHz4cPz+++9S/cLCQoSGhsLDwwMeHh5Yt24d+vbtK6Uz7O3t8cUXX8DDwwMffPABACAmJgZeXl5o3749Bg0ahKNHj0rt3b17FxMnToSzszM6deqEoKAg5OfnAwCuXbuGUaNGQaFQoGvXrggLC5OOez4lVFhYiA0bNqB3795o3749xo4di+vXr0t17e3t8d133+Gtt95C27Zt8e677yI5ObnMsbly5QratGmDJ0+eAADS0tJgb2+PvXv3SnVGjRqF3bt3q6SEIiMjMXbsWKxevRoeHh5wc3NDcHAwnp/QDQsLQ6dOneDh4YHdu3ernDcvLw8rV65E9+7d4eTkhA8++AApKSkAgMGDB2Pbtm1S3QkTJmDMmDHS6127dmH06NFlvjciqlwYsBD917lz57B3716MHDkSs2fPxocffojvv/8egwcPxvvvv49bt24BAMLDw7F//36sWrUKEREROHnypNof/xMnTmDHjh2YMWMG0tPT4evrCy8vLxw4cADvvfce5syZg5iYGABAUFAQatasif3792Pt2rU4evQovv32WwDArFmz4ODggIMHD2Lp0qXYsGEDfv75Z7W+r127Fps2bcLcuXOxb98+NGnSBO+99x6ys7OlOmvWrEFAQAAiIyPx8OFDfP7552WOiYODA+rWrSv19ffff4dMJsO5c+cAAFlZWbh48SK6du2qduz58+dx8+ZN7NixA/Pnz8fWrVvx66+/AngWVGzduhXLli3D5s2bVQIgAFi4cCGOHTuGFStWYOfOnSgoKMDkyZNRWFgIT09PKYDMz89HXFwcLl68KAV5//nPf4rtDxFVbgxYiP5r/PjxePXVV7Fx40aMHDkSgwYNQrNmzTBu3Dh069YNO3bsAAD8+9//xscffwxPT0+0adMGy5cvx4tLwd555x20aNECrVq1wvbt29G5c2eMGTMGzZo1w9tvv4133nkHW7ZsAQDcuXMHr7zyCmxsbODi4oL169eje/fu0r66deuiSZMm6NatGyIiItCmTRuVcwkhsG3bNnz00Ufo3bs3WrZsiaCgIJiYmOD777+X6k2YMAGdOnWCnZ0dRo8ejUuXLpU5JjKZDJ07d5YChLNnz6Jbt25SwHLmzBk0b94cjRo1Ujv26dOnCAoKQosWLfD222+jdevWuHjxIgDg22+/xfjx49GzZ084ODhgyZIl0nGPHj3Cd999hwULFqBjx45o3bo1QkNDcfPmTfznP/+Bp6cnzp49CyEELl++jFdffRW1a9fGlStXUFhYiOjoaAYsRFUQ17AQ/VeTJk0AAImJifjhhx+wa9cuaV9+fj48PT3x4MED3Lt3D+3atZP2tWjRAnXq1Cm2LQBISkrCiRMn4OzsrNJe8+bNAQDvvfce5s6di2PHjqFbt24YOHCgFJT4+vri008/xa5du9CjRw+8/fbbsLKyUjnX/fv3kZmZCYVCIZVVr14dbdu2RWJiolTWrFkz6WcLCwtpRqIsnp6e2Lp1K4Bnqa358+fDx8cHDx48wG+//VZicGBpaQkLCwuVcxYUFAB4NsZTpkyR9rVq1Qo1a9YEAPz5558oLCxUeT9169ZF8+bNkZiYiHfffRc5OTm4ceMGzp49Czc3N9y7dw+xsbEwMTFBtWrV0LZtW43eGxFVHgxYiP5LLpcDeDYz8P7772PIkCEq+83NzWFq+uwj8+KMyouvi9oCgIKCAgwaNEhaz1KkqK3BgwejU6dOiIqKwsmTJzFt2jS8//77mD59OiZNmoQBAwYgKioKx48fx/jx4xEUFIQRI0YUe67nPX36FIWFhdLr6tWrazIMarp06YKAgADcunULqampcHd3R6tWrXD+/Hn89ttvmDdvXrHHmZmZqZU9P04vjlnReJT1fszMzODm5obff/8dMTExePvtt3Hv3j3ExMTg6dOn6NKlC2QyWbneKxEZL6aEiF7QvHlz3L59G82aNZO2Xbt24dSpU6hduzYaNmyIy5cvS/WTk5Px+PHjUtu7deuWSns//fQTDhw4AAD47LPPcP/+fYwePRrh4eH4+OOP8eOPPyIvLw9LliyBmZkZJkyYgG+++QYjR45UWbALAK+88goaNGiAuLg4qSw/Px+XL1+WZnF0YWVlhVatWmHDhg1wcnKCiYkJ3NzccOjQIaSkpMDNzU3rNl9//XUpPQQ8W/hcNIZNmzaFqampyvt5+PAhbt26Jb2fonUscXFxcHV1haurK86dO4fTp08zHURURTFgIXqBt7c3Dh8+jK1bt+Kvv/7C5s2bsXnzZrz22msAIF398ttvv+HatWvw9/cHgBL/Vf/uu+/i0qVL+Oyzz/Dnn3/iwIED+PTTT2FjYwPgWcpo8eLFuHbtGm7cuIGff/4Zbdq0gVwux7lz5xAUFISkpCRcvHgRMTExamtYivq8evVqHD9+HImJiZg/fz7y8vIwcOBAvYxJly5dsG/fPri4uAAA3NzccPjwYbi7uxc7k1KWMWPGYOvWrTh69Cj++OMPBAQEoFq1Z19HtWrVwogRIxAUFITo6Ghcu3YNM2fORKNGjdClSxcAzwKW48ePw8LCAtbW1mjTpg1ycnJw9uxZBixEVRRTQkQvcHJyQkhICNasWYOQkBC8+uqrWLVqFTp06AAAmDhxIu7du4epU6fCxMQEkyZNQkxMTIkplyZNmuCrr75CaGgoNm7cCGtra8yZMweDBw8GAAQGBmLRokUYO3YsCgoK0KNHDwQEBAB4NvuyePFiDB8+HKampujfvz8mT56sdo6JEyciKysL8+fPR1ZWFpydnfHNN9/o7V4tXbt2xcaNG+Hq6goAcHV1hRCi3MHB22+/jYcPHyIoKAi5ubmYNGkSrl27Ju2fPXs2VqxYgWnTpkGpVKJz587YvHmzFBy1atUKlpaWUn9MTEzg7OyMzMxMo7s/DRHpB+90S6SlU6dOoW3bttIfxgcPHqBTp0746aefYGtrW8G9IyKqmhiwEGlpypQpePr0KWbMmAGZTIYvvvgCd+/exZ49eyq6a0REVRYDFiItpaWlYdGiRfj9998hhECnTp0wf/58WFtbV3TXtHb06FHMmTOnxP2urq7YsGHDP9gjIqLiMWAheon9/fffyMjIKHG/ubl5pQzEiKjqYcBCRERERo+XNRMREZHRY8BCRERERo8BCxERERk9BixERERk9BiwEBERkdFjwEJERERGjwELERERGb3/BzM59kYQ6KseAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sorted_result = (\n",
    "    pd.DataFrame(d)\n",
    "    .sort_values(\"sharpe_ratio\", ascending=False)\n",
    "    .reset_index(drop=True)\n",
    "    .pivot(\"holding_size\", \"regression_window\", \"sharpe_ratio\")\n",
    ")\n",
    "\n",
    "sns.heatmap(sorted_result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-09-01T07:14:39.978266600Z",
     "start_time": "2023-09-01T07:14:39.763268Z"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
